package com.erp.staobaotrasg.utils.m;

import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.BitmapFactory;
import android.os.Environment;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author cfg
 *         E-mail : cfgnqk@sina.com
 *         function:
 *         2.判断文件是否存在
 *         1. 用于文件的保存，读取。
 *         <p/>
 *         on:2016-3-15
 */
public class MCFileUtil {
    public static final int JPEG = 0x0000;
    public static final int PNG = 0x0001;
    /**
     * 获得外置储存的存储设备+存放的目录
     */
    public static final String PATH = Environment.getExternalStorageDirectory().toString() + "/produce/cfgnqk/";

    /**
     * 判断存储卡是否挂载的状态
     *
     * @return 挂载状态的判断信息 挂载返回true ，否则返回false
     */
    private static boolean isMounted() {
        String state = Environment.getExternalStorageState(); //获得存储的状态信息
        return state.equals(Environment.MEDIA_MOUNTED);
    }


    /**
     * 获得要保存的图片的的名字
     *
     * @param url 根据url 地址进行获取
     * @return
     */
    public static String getImageName(String url) {
        //截取 正常的图片地址 "http://www.youzhu.com//Public/Uploads/cases/1456999679.jpg";
        String resUrl = url.substring(url.lastIndexOf("/") + 1);
        return resUrl;
    }

    /**
     * 保存图片的方法
     *
     * @param url    传入图片的地址，利用图片的地址 getImageName() 方法 进行切割出图片的名字。
     * @param bitmap 传入要保存的图片
     * @throws IOException
     */
    public static void saveImage(String url, Bitmap bitmap) throws IOException {
        if (!isMounted()) return;
        File file = new File(PATH);
        if (!file.exists()) { //如果文件的目录不存在 则进行创建
            file.mkdirs();
        }
        String purl = getImageName(url);
        file = new File(file, purl); //创建出文件
        if (file.exists() && file.length() != 0) return; //如果文件存在并且不为大小不为0 则结束此方法，不再进行保存
        FileOutputStream fos = new FileOutputStream(file);
        int format = 0; //从url 地址中进行判断 地址的图片的格式
        if (url.contains(".jpg") || url.contains(".jpeg")) {
            format = JPEG;
        } else {
            format = PNG;
        }
        if (format == JPEG) {
            bitmap.compress(CompressFormat.JPEG, 100, fos);
        } else if (format == PNG) {
            bitmap.compress(CompressFormat.PNG, 100, fos);
        }
        fos.close();//对流进行关闭
    }

    /**
     * 保存图片的方法
     *
     * @param url    传入图片的地址，利用图片的地址 getImageName() 方法 进行切割出图片的名字。
     * @param bitmap 传入要保存的图片
     * @param format 传入要保存的格式
     * @throws IOException
     */
    public static void saveImage(String url, Bitmap bitmap, int format) throws IOException {
        if (!isMounted()) return;
        File file = new File(PATH);
        if (!file.exists()) { //如果文件的目录不存在 则进行创建
            file.mkdirs();
        }
        String purl = getImageName(url);
        file = new File(file, purl); //创建出文件
        if (file.exists() && file.length() != 0) return; //如果文件存在并且不为大小不为0 则结束此方法，不再进行保存
        FileOutputStream fos = new FileOutputStream(file);
        if (format == JPEG) {
            bitmap.compress(CompressFormat.JPEG, 100, fos);
        } else if (format == PNG) {
            bitmap.compress(CompressFormat.PNG, 100, fos);
        }
        fos.close();//对流进行关闭
    }

    /***
     * 对已经存在的文件进行获取 从本地获取
     *
     * @param url 对 url 进行处理 根据url
     * @return
     */
    public static Bitmap readImageFromLocal(String url) {
        Bitmap bitmap = null;
        File file = new File(PATH + getImageName(url)); //此处应使用适当的获取文件名字的方法
        if (file.exists()) {
            try {
                bitmap = BitmapFactory.decodeStream(new FileInputStream(file));
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
            return bitmap; //文件存在则 返回
        }
        return null; //不存在 则进行返回空值
    }

    /**
     * 判断图片文件是否存在的方法
     *
     * @param url
     * @return
     */
    public static boolean hasImageBitmap(String url) {
        File file = new File(PATH + getImageName(url)); //此处应使用适当的获取文件名字的方法
        if (file.exists()) {
            return true;
        } else
            return false;
    }
    //---------------------------------------------可用----------方法-------------------

    /**
     * 保存文本类的文件
     *
     * @param filename 需要保存文件的名字
     * @param content  需要保存的内容
     * @throws IOException
     */
    public static void saveFileString(String filename, String content) throws IOException {
        if (!isMounted()) return; //如果外置储存没有进行加载 不再进行下一步处理
        File file = new File(PATH);
        if (!file.exists()) {
            file.mkdirs();
        }
        file = new File(file, filename);
        if (file.exists() && file.length() != 0) return; //如果文件已经写入过 ，则不再进行保存 跳出执行
        //获得到写出流
        //   FileOutputStream fos = new FileOutputStream(file);
        BufferedWriter bufferedWriter = new BufferedWriter((new FileWriter(file)));
        bufferedWriter.write(content);
        bufferedWriter.flush();//将缓冲区数据刷到指定文件中
        bufferedWriter.close();
    }

    /***
     * 判断是否含有要使用的文件
     *
     * @param filename
     * @return
     * @throws IOException
     */
    public static boolean hasFileString(String filename) throws IOException {
        if (!isMounted()) return false; //如果外置储存没有进行加载 不再进行下一步处理
        File file = new File(PATH);
        file = new File(file, filename);
        if (file.exists() && file.length() != 0) { //文件存在且不为0
            return true; //有数据的信息
        }
        return false;
    }

    /**
     * 读取要使用的文件  读取文本文件 不适合特大文件
     * </br>内存会溢出 使用前应当先对文件是否存在进行判断
     *
     * @param filename 传入要使用的文件的名字
     * @return 返回的是字符串类型的文件，
     * @throws IOException 抛出 IO 一场进行处理
     */
    public static String getFileString(String filename) throws IOException {
        if (!isMounted()) return null; //如果外置储存没有进行加载 不再进行下一步处理
        if (hasFileString(filename)) {
            File file = new File(PATH);
            file = new File(file, filename);
            String resVStri = "";
            StringBuffer buffer = new StringBuffer();
            if (file.exists() && file.length() != 0) { //文件存在且不为0
                BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
                for (String line = null; (line = bufferedReader.readLine()) != null; ) {
                    buffer.append(line);
                }
            }
            resVStri = buffer.toString();
            return resVStri;
        } else {
            throw new IllegalArgumentException("文件不存在，请先进行存储，并且判断");

        }

    }

}